/*
 * Licensed to the Tai Ping Jin Ke
 *
 * Copyright (c) 2022 .
 * All rights reserved.
 * 项目名称：太平金科-基础组件封装层-SpringBoot组件封装-核心依赖
 * 版权说明：本软件属太平金融科技服务(上海)有限公司所有，在未获得太平金融科技服务(上海)有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.taipingframework.boot.web.properties;

import io.jsonwebtoken.SignatureAlgorithm;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;

@Getter
@Setter
public class TokenProperty {
//CHECKSTYLE:OFF

    /**
     * 发行方
     */
    private String issuer;

    /**
     * 主题
     */
    private String subject;

    /**
     * 受众群体
     */
    private String audience;

    /**
     * 过期时间(单位：分钟)
     */
    private Integer expire = 30;

    /**
     * 签名算法
     * <p>
     * 支持 对称秘钥 的 签名算法： 如 HS256 HS384 HS512 .
     * 支持 非对称秘钥 的 签名算法： 如 RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512 .
     */
    private SignatureAlgorithm algorithm;// = SignatureAlgorithm.RS256;

    /**
     * 说明使用 非对称秘钥 或 对称秘钥
     */
    private KeyType keyType;

    /**
     * 对称秘钥 - 秘密钥匙
     */
    private String secretKey;

    /**
     * 非对称秘钥 - 私钥
     */
    private String privateKey;

    /**
     * 非对称秘钥 - 公钥
     */
    private String publicKey;

    /**
     * 创建token与验证token时，依赖的 明文密码字符串
     */
    private String plainKey;

    /**
     * 允许时钟偏差(单位：秒)
     */
    private Integer skewSeconds = 30;

    /**
     * 签名前缀
     */
    private String prefix = StringUtils.EMPTY;

    /**
     * 秘钥类型
     */
    public enum KeyType {
        /**
         * 非对称秘钥
         */
        ASYMMETRIC,
        /**
         * 对称秘钥
         */
        SYMMETRICAL,
        /**
         * 不加密，使用明文密码创建token和验证token
         */
        NONE
    }

//CHECKSTYLE:ON
}
